home *** CD-ROM | disk | FTP | other *** search
/ Skunkware 5 / Skunkware 5.iso / src / Tools / glimpsehttp / news / build_db next >
Text File  |  1995-05-16  |  2KB  |  65 lines

  1. #!/usr/local/bin/perl
  2. #
  3. # Build articles database from scratch
  4.  
  5. # where your news archiving directory is
  6. $HTTPD_NEWSHOME="/usr1/paul/news";
  7. $gunzip="/usr/local/bin/gunzip";
  8.  
  9. $newsbin = $HTTPD_NEWSHOME;
  10. # output file
  11. $out = "$HTTPD_NEWSHOME/groups/articles.db";
  12.  
  13. open(OUT, ">$out.new") ||
  14.     die "Cannot create $out.new: $!";
  15. chdir "$HTTPD_NEWSHOME/groups" ||
  16.     die "Cannot chdir to $HTTPD_NEWSHOME/groups: $!";
  17. $groups = `awk '{print \$1}' ../getnews.cfg`;
  18. foreach $group (split(/\n+/,$groups)) {
  19.     $group =~ s/^#\s*//;
  20.     chdir $group ||
  21.         die "Cannot chdir to $group: $!";
  22.     opendir(DIR,".") || die "Cannot open .: $!";
  23.     file: while ($file = readdir(DIR)) {
  24.         next if $file =~ /^\./;
  25.         $input = ($file =~ /\.gz/)?"exec $gunzip < $file|":"<$file";
  26.         open(INPUT,"$input") || die "Cannot open $input: $!";
  27.         $author = '';
  28.         $address = '';
  29.         $subject = '';
  30.         $ID = '';
  31.         $date = '';
  32.         $article = "/$group/$file";
  33.         while (<INPUT>) {
  34.             chop;    # strip record separator
  35.             last if /^$/;
  36.             if (/^From: (.*)/) {
  37.             $author = $1;
  38.             $address = $1 if /(\w[-+.\w]+@\w[-+.\w]*)/;
  39.             }
  40.             if (/^Message-ID: <([^ ]+)>/) {
  41.             $ID = $1;
  42.             }
  43.             if (/^Subject: (.*)/) {
  44.             $subject = $1;
  45.             }
  46.             if (/^Date: (.*)/) {
  47.             $date = $1;
  48.             }
  49.         }
  50.         print OUT "$article\t$ID\t$address\t".
  51.             "$author\t$subject\t$date\n";
  52.         # $article, $ID, $address, $author, $subject, $date
  53.         close IN;
  54.     }
  55.     closedir(DIR);
  56.     chdir "..";
  57. }
  58. close OUT;
  59. # force index update
  60. open(OUT,">$HTTPD_NEWSHOME/groups/newarticles");
  61. close OUT;
  62. system "/bin/sort -T . $out.new >$out";
  63. # unlink "$out.new";
  64. exec "$newsbin/build_idx";
  65.